package org.atlantis.netty.discard;

import org.jboss.netty.buffer.ChannelBuffer;
import org.jboss.netty.channel.Channel;
import org.jboss.netty.channel.ChannelHandlerContext;
import org.jboss.netty.channel.ExceptionEvent;
import org.jboss.netty.channel.MessageEvent;
import org.jboss.netty.channel.SimpleChannelHandler;

/*
 * DiscardIoHandler继承SimpleChannelHandler，SimpleChannelHandler是ChannelHandler的一个简单的实现。
 * 它提供了不同的事件处理方法可供我们来重写。现在，我们只需要继承SimpleChannelHandler就满足需求了，不需要实现
 * ChannelHandler来完全自定义实现其中的方法。
 */
public class DiscardServerHandler extends SimpleChannelHandler {

	// 处理异常事件
	@Override
	public void exceptionCaught(ChannelHandlerContext ctx, ExceptionEvent e) throws Exception {
		e.getCause().printStackTrace();
		Channel ch = e.getChannel();
		ch.close();
	}

	// 处理消息接收事件，MessageEvent中包含了接收到的数据。
	@Override
	public void messageReceived(ChannelHandlerContext ctx, MessageEvent e) throws Exception {
		/*
		 * ChannelBuffer是netty中储存字节序列的基本数据结构，它类似于NIO中的ByteBuffer，但是比ByteBuffer
		 * 使用起来更简单。
		 */
		ChannelBuffer buf = (ChannelBuffer) e.getMessage();
		while (buf.readable()) {
			System.out.println((char) buf.readByte());
			System.out.flush();
		}
	}
}
